package com.example.controller;

import com.example.domain.Song;
import com.example.exception.Result;
import com.example.service.SongService;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 *管理员侧/歌曲管理
 * @Description:歌曲管理控制器
 * @Author: Ma_XiaoLong
 * @CreateTime： 2024/1/18 9:14
 */
@RestController
@Slf4j
public class SongController{
@Autowired
private SongService songService;
    /**
     *根据歌单id查询所有歌曲列表
     * @Description: 根据歌单id查询所有歌曲列表（没有分页）
     * @Author: Ma_XiaoLong
     * @CreateTime: 2024/1/18 9:16
     * @return: com.example.exception.Result
     **/
    @GetMapping("/admin/song/songlist/{songlistId}")
    public Result getListBySonglistId(@PathVariable("songlistId") Integer songlistId){
        log.info("根据歌单id查询歌单列表：{}"+songlistId);
        List<Song> songList = songService.getListBySonglistId(songlistId);
        return Result.success("查询成功"+songList);

    }
/**
 *向指定歌单(ID)当中添加新的歌曲
 * @Description: 向指定歌单(ID)当中添加新的歌曲
 * @Author: Ma_XiaoLong
 * @CreateTime: 2024/1/18 11:25
 * @param: songlistId
 * @param: song
 * @return: com.example.exception.Result
 **/
    //请求方式：POST
    //请求地址：/admin/song/songlist/1
    //请求参数：
    //path:歌单id
    //body：添加的歌曲信息
    //请求响应数据：歌曲详细信息Songlist
    @PostMapping("/admin/song/songlist/{songlistId}")
    public Result saveSonglistSong(@PathVariable("songlistId") Integer songlistId, @RequestBody Song song){
        log.info("向指定歌单（ID：{}当中添加新的歌曲：{}，",songlistId, song);
        //向数据库中添加歌曲，并添加到指定歌单中
        int rows = songService.addSongToSonglist(songlistId,song);
        if (rows != 1){
            return Result.faile("保存失败");
        }
        return Result.success("保存成功！"+song);
    }
/**
 *删除指定歌单下的某个歌曲
 * @Description: 删除指定歌单下的某个歌曲
 * @Author: Ma_XiaoLong
 * @CreateTime: 2024/1/19 9:42
 * @param: songlistId
 * @param: songId
 * @return: com.example.exception.Result
 **/
    //删除指定歌单下的某个歌曲
    @DeleteMapping("/admin/song/songlist/{songlistId}/{songId}")
    public Result deleteSongBySonglistIdSongId(@PathVariable("songlistId") Integer songlistId,@PathVariable("songId") Integer songId){
        int rows =songService.deleteSongBySonglistIdSongId(songlistId,songId);
        if(rows != 1){
            return Result.faile("删除失败");
    }
        return Result.success(rows+"删除成功");
}
/**
 * @Description: 查询歌曲列表
 * @Author: Ma_XiaoLong
 * @CreateTime: 2024/1/26 16:34
 * @param: song
 * @return: com.example.exception.Result
 **/
//获取所有歌曲详情
//请求地址：GET
//请求地址：/admin/song
//请求响应数据
    @GetMapping("admin/song")
    public Result song(Song song){
        log.info("查询歌曲请求参数：{}",song);
        List<Song> songs = songService.getListBySong(song);
        //封装分页对象，响应给前端
        PageInfo<Song> pageInfo = new PageInfo<>(songs);
        System.out.println("pageInfo = "+pageInfo);
        return Result.success("查询成功",pageInfo);
    }


    /**
     * @Description: 根据id查询歌曲
     * @Author: Ma_XiaoLong
     * @CreateTime: 2024/1/26 16:35
     * @param: id
     * @return: com.example.exception.Result
     **/
    //根据ID获取歌曲详情
    //请求地址：GET
    //请求地址：/admin/song/1，1表示id
    // 请求参数：path， 只有一个id
    //请求响应数据
    @GetMapping("/admin/song/{id}")
    public Result getSongById(@PathVariable Integer id){   //若参数名字不匹配@PathVariable("id"),后面参数写不同的名字
        log.info("根据id获取歌单详细信息接口: {}",id);
        Song song = songService.getById(id);
        return Result.success("查询成功",song);
    }


    /**
     * @Description: 根据ID删除歌曲
     * @Author: Ma_XiaoLong
     * @CreateTime: 2024/1/26 16:36
     * @param: id
     * @return: com.example.exception.Result
     **/
    //根据ID删除歌曲
    //请求地址：DELETE
    //请求地址：/admin/song/1
    // 请求参数：path， 只有一个id
    //请求响应数据：是否成功状态
    @DeleteMapping("/admin/song/{id}")
    public Result deleteById(@PathVariable Integer id){
        log.info("删除歌单：{}",id);
        int rows = songService.deleteById(id);
        if(rows != 1){
            return Result.faile("删除失败！");
        }
        return Result.success("删除成功！");
    }
    /**
     * @Description: 根据ID修改歌曲详情
     * @Author: Ma_XiaoLong
     * @CreateTime: 2024/1/29 16:49
     * @param: song
     * @return: com.example.exception.Result
     **/
    //根据ID修改歌曲详情
    //请求地址：PUT
    //请求地址：/admin/song
    // 请求参数：body，封装了id以及其他要修改的信息
    //请求响应数据：成功与否状态
    @PutMapping("/admin/song")
    public Result updateSong(@RequestBody Song song){
        log.info("更新歌曲信息：{}",song);
        int rows = songService.updateById(song);
        if(rows != 1){
            return Result.faile("更新失败！");
        }
        return Result.success("更新成功！");
    }
    /**
     * @Description: 新增歌单
     * @Author: Ma_XiaoLong
     * @CreateTime: 2024/1/29 16:49
     * @param: song
     * @return: com.example.exception.Result
     **/
    //新增歌单
    //请求地址：POST
    //请求地址：/admin/song
    // 请求参数：body，封装了除id（id插入以后才生成）以外，其他要新增的信息
    //响应数据：成功与否状态
    @PostMapping("/admin/song")
    public Result addSong(@RequestBody Song song){
        log.info("新增歌单信息：{}",song);
        int rows = songService.saveSong(song);
        if(rows != 1){
            return Result.faile("新增失败！");
        }
        return Result.success("新增成功！");
    }
}
